package com.app.sgd.controller.action;

import java.util.ArrayList;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.app.sgd.business.dao.SQLModalidadEnvioDAO;
import com.app.sgd.business.facade.VariablesFacade;
import com.app.sgd.manager.SGDDispatchAction;
import com.app.sgd.model.bean.DocumentoOrdenEnvio;
import com.app.sgd.model.bean.ModalidadEnvio;
import com.app.sgd.model.bean.Usuario;
import com.app.sgd.util.Constants;
import com.app.sgd.util.SessionConstants;
import com.app.sgd.util.Util;
import com.app.sgd.view.actionform.ModalidadEnvioForm;
import com.app.sgd.view.vo.FiltroBusquedaVO;

public class ModalidadEnvioAction extends SGDDispatchAction{
	
	public void resetAll(ActionForm form, HttpServletRequest request) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setCheckValuesDocumentosOrdenes(new String[0]);
		formdoc.setCheckValuesFechaRecepcion(new String());
		formdoc.setCheckValuesHoraRecepcion(new String());
		formdoc.setCheckValuesDocumentosCargo(new String());
		formdoc.setCheckValuesDocumentosBusqueda(new String[0]);
		formdoc.setCheckValuesOrdenes(new String[0]);
		formdoc.setNroOrden(new String());
		formdoc.setCodModalidadEnvio(Constants.VALOR_DEFAULT_CERO);
		formdoc.setCodCourier(Constants.VALOR_DEFAULT_CERO);
		formdoc.setFechaInicio(new String());
		formdoc.setFechaFin(new String());
		formdoc.setLstOrdenesEnvio(new ArrayList());
		formdoc.setLstDocumentosOrdenEnvio(new ArrayList());
		formdoc.setLstDocumentosOrdenEnvioEliminar(new ArrayList());
		formdoc.setNombreUnidad(new String());
		formdoc.setLocalidad(new String());
		formdoc.setFechaEntregaCourier(new String());
		request.removeAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		request.removeAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO);
	}
	
	public void reset(ActionForm form, HttpServletRequest request) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setCodigoOrden(Constants.VALOR_DEFAULT_CERO);
		formdoc.setNumeroOrden(new String());
		formdoc.setCodigoModalidadEnvio(Constants.VALOR_DEFAULT_CERO);
		formdoc.setCodigoCourier(Constants.VALOR_DEFAULT_CERO);
		formdoc.setFechaEmision(new String());
		formdoc.setCodigoEstado(Constants.VALOR_DEFAULT_ACTIVO);
		formdoc.setUnidadOrganica(Constants.VALOR_DEFAULT_CERO);
		
		formdoc.setCodTipoDocumento(new String());
		formdoc.setNumDocumento(new String());
		formdoc.setAsunto(new String());
		formdoc.setFechaDocInicio(new String());
		formdoc.setFechaDocFin(new String());
		request.removeAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO);
		
		formdoc.setLstOrdenesEnvio(new ArrayList());
		formdoc.setLstDocumentosOrdenEnvio(new ArrayList());
		formdoc.setLstDocumentosOrdenEnvioEliminar(new ArrayList());
		formdoc.setCheckValuesDocumentosOrdenes(new String[0]);
		formdoc.setFlgNuevo(Constants.NO);
		
		formdoc.setCheckValuesFechaRecepcion(new String());
		formdoc.setCheckValuesHoraRecepcion(new String());
		formdoc.setCheckValuesDocumentosCargo(new String());
		formdoc.setCheckValuesDocumentosBusqueda(new String[0]);
		formdoc.setNombreUnidad(new String());
		
		formdoc.setLocalidad(new String());
		formdoc.setFechaEntregaCourier(new String());
	}
	
	public void resetBusqueda(ActionForm form, HttpServletRequest request) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		
		formdoc.setCodTipoDocumento(new String());
		formdoc.setNumDocumento(new String());
		formdoc.setAsunto(new String());
		formdoc.setFechaDocInicio(new String());
		formdoc.setFechaDocFin(new String());
		formdoc.setLocalidad(new String());
		formdoc.setFechaEntregaCourier(new String());
		
		request.removeAttribute(SessionConstants.LISTA_DOCUMENTOS_BUSQUEDA_ORDEN_ENVIO);
	}
	
	public ActionForward mantenimientoEnvios(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		resetAll(form,request);
		
		request.getSession().removeAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		
		VariablesFacade variablesFacade = new VariablesFacade();
		ArrayList lstModalidadEnvio = variablesFacade.getTipoModalidadEnvio();
		request.getSession().setAttribute(SessionConstants.LISTA_TIPO_MODALIDAD_ENVIO, lstModalidadEnvio);
		ArrayList lstCourier = variablesFacade.getCourier();
		request.getSession().setAttribute(SessionConstants.LISTA_COURIER, lstCourier);
		ArrayList lstEstadosRegistro = variablesFacade.getEstadoRegistro();
		request.getSession().setAttribute(SessionConstants.LISTA_ESTADO_REGISTRO, lstEstadosRegistro);
		
		Usuario usuarioLogin = (Usuario)request.getSession().getAttribute(SessionConstants.SGD_USUARIO_SESION_ACTIVO);
		String tipoBusqueda = (String)request.getSession().getAttribute(SessionConstants.TIPO_BUSQUEDA);
		ArrayList lstUnidadOrigen = variablesFacade.getOficina();//(usuarioLogin,tipoBusqueda,1);
		request.getSession().setAttribute(SessionConstants.LISTA_UNIDAD_ORIGEN, lstUnidadOrigen);
		
		return mapping.findForward("mantenimientoEnvios");
	}
	
	public ActionForward vistaPreliminarOrdenEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("vistaPreliminarOrdenEnvio");
	}
	
	public ActionForward buscarOrdenesEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setNroOrden(formdoc.getNroOrden()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getNroOrden().trim());
		filtroBusquedaVO.setCodModalidadEnvio(formdoc.getCodModalidadEnvio()==null ? Constants.VALOR_DEFAULT_CERO : formdoc.getCodModalidadEnvio());
		filtroBusquedaVO.setFechaInicio(formdoc.getFechaInicio()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaInicio());
		filtroBusquedaVO.setFechaFin(formdoc.getFechaFin()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaFin());
		filtroBusquedaVO.setCodCourier(formdoc.getCodCourier()==null ? Constants.VALOR_DEFAULT_CERO : formdoc.getCodCourier());
		
		formdoc.setCheckValuesOrdenes(new String[0]);
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		
//		ArrayList lstModalidadEnvioAct = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
//		if(lstModalidadEnvioAct!=null && lstModalidadEnvioAct.size()>0){
//		if(formdoc.getFlgNuevo().equals(Constants.NO)){
			ArrayList lstModalidadEnvio = sqlModalidadEnvioDAO.listarOrdenesEnvio(filtroBusquedaVO);
			request.getSession().setAttribute(SessionConstants.LISTA_ORDENES_ENVIO, lstModalidadEnvio);			
//		}
		return mapping.findForward("mantenimientoEnvios");
	}
	
//	public ActionForward grabarOrdenEnvio(ActionMapping mapping, ActionForm form,
//			HttpServletRequest request, HttpServletResponse response) throws Exception {
//		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
//		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
//		filtroBusquedaVO.setCodOrden(formdoc.getCodigoOrden());
//		filtroBusquedaVO.setNroOrden(formdoc.getNumeroOrden());
//		filtroBusquedaVO.setCodModalidadEnvio(formdoc.getCodigoModalidadEnvio());
//		filtroBusquedaVO.setFechaEmision(formdoc.getFechaEmision());
//		filtroBusquedaVO.setCodCourier(formdoc.getCodigoCourier());
//		filtroBusquedaVO.setCodEstado(formdoc.getCodigoEstado());
//		
//		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
//		int codOrden = sqlModalidadEnvioDAO.grabarOrdenEnvio(filtroBusquedaVO);
//		
//		formdoc.setCodigoOrden(String.valueOf(codOrden));
//		
//		return mapping.findForward("nuevoEnvio");
//	}
	
	public ActionForward actualizarOrdenEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		verificarCargo(mapping,form,request,response);
		Usuario usuario = (Usuario) request.getSession().getAttribute(SessionConstants.SGD_USUARIO_SESION_ACTIVO);
		
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setCodOrden(formdoc.getCodigoOrden());
		filtroBusquedaVO.setNroOrden(formdoc.getNumeroOrden());
		filtroBusquedaVO.setCodModalidadEnvio(formdoc.getCodigoModalidadEnvio());
		filtroBusquedaVO.setFechaEmision(formdoc.getFechaEmision());
		filtroBusquedaVO.setCodCourier(formdoc.getCodigoCourier());
		filtroBusquedaVO.setCodEstado(formdoc.getCodigoEstado());
		filtroBusquedaVO.setUsuario(usuario);
		filtroBusquedaVO.setLocalidad(formdoc.getLocalidad());
		filtroBusquedaVO.setFechaEntregaCourier(formdoc.getFechaEntregaCourier());
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		int codOrden = sqlModalidadEnvioDAO.grabarOrdenEnvio(filtroBusquedaVO);
		
		formdoc.setCodigoOrden(String.valueOf(codOrden));
		
		ModalidadEnvio modalidadEnvio =  new ModalidadEnvio();
		modalidadEnvio.setCodigoOrden(formdoc.getCodigoOrden());
		modalidadEnvio.setLstDocumentosOrdenEliminar(new ArrayList()); //formdoc.getLstDocumentosOrdenEnvioEliminar()
		modalidadEnvio.setLstDocumentosOrden(formdoc.getLstDocumentosOrdenEnvio());
		
		filtroBusquedaVO.setModalidadEnvio(modalidadEnvio);
		filtroBusquedaVO.setCodOrden(formdoc.getCodigoOrden());
		
		int res = sqlModalidadEnvioDAO.actualizarDocumentosOrdenEnvio(filtroBusquedaVO);
		
		modalidadEnvio = sqlModalidadEnvioDAO.listarDocumentosOrdenEnvio(modalidadEnvio,formdoc.getUnidadOrganica());
		ArrayList lstModalidadEnvio = modalidadEnvio.getLstDocumentosOrden();
		formdoc.setLstDocumentosOrdenEnvio(lstModalidadEnvio);
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, lstModalidadEnvio);
		
		if(formdoc.getFlgNuevo().equals(Constants.NO))
			return mapping.findForward("modificarEnvio");
		else
			return mapping.findForward("nuevoEnvio");
	}
	
	public ActionForward eliminarOrdenesEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setNroOrden(formdoc.getNroOrden()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getNroOrden().trim());
		filtroBusquedaVO.setCodModalidadEnvio(formdoc.getCodModalidadEnvio()==null ? Constants.VALOR_DEFAULT_CERO : formdoc.getCodModalidadEnvio());
		filtroBusquedaVO.setFechaInicio(formdoc.getFechaInicio()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaInicio());
		filtroBusquedaVO.setFechaFin(formdoc.getFechaFin()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaFin());
		filtroBusquedaVO.setCodCourier(formdoc.getCodCourier()==null ? Constants.VALOR_DEFAULT_CERO : formdoc.getCodCourier());
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		
		ArrayList lstOrdenesEnvio = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		
		String []sel = formdoc.getCheckValuesOrdenes();
		ArrayList lstOrdenesEnvioEliminar = new ArrayList();
		for(int i=0,n=sel.length; i<n;i++){
			lstOrdenesEnvioEliminar.add(lstOrdenesEnvio.get(Integer.parseInt(sel[i])));
		}
		
		int res = sqlModalidadEnvioDAO.eliminarOrdenesEnvio(lstOrdenesEnvioEliminar);
		
		ArrayList lstModalidadEnvio = sqlModalidadEnvioDAO.listarOrdenesEnvio(filtroBusquedaVO);
		request.getSession().setAttribute(SessionConstants.LISTA_ORDENES_ENVIO, lstModalidadEnvio);
		
		formdoc.setCheckValuesOrdenes(new String[0]);
		
		return mapping.findForward("mantenimientoEnvios");
	}
	
	public ActionForward siguiente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("mantenimientoEnvios");
	}
	
	public ActionForward modificarOrdenEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		reset(form,request);
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setFlgNuevo(Constants.NO);
		
		ArrayList lstOrdenesEnvio = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		
		String sel = request.getParameter("index");
		ModalidadEnvio modalidadEnvio = (ModalidadEnvio)lstOrdenesEnvio.get(Integer.parseInt(sel));
		
		formdoc.setCodigoOrden(modalidadEnvio.getCodigoOrden());
		formdoc.setNumeroOrden(modalidadEnvio.getNroOrden());
		formdoc.setCodigoModalidadEnvio(modalidadEnvio.getCodModalidadEnvio());
		formdoc.setFechaEmision(modalidadEnvio.getFechaEmision());
		formdoc.setCodigoCourier(modalidadEnvio.getCodCourier());
		formdoc.setCodigoEstado(modalidadEnvio.getCodEstado());
		formdoc.setLocalidad(modalidadEnvio.getLocalidad());
		formdoc.setFechaEntregaCourier(modalidadEnvio.getFechaEntregaCourier());
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		modalidadEnvio = sqlModalidadEnvioDAO.listarDocumentosOrdenEnvio(modalidadEnvio,Constants.VALOR_DEFAULT_CERO);
		
		formdoc.setLstDocumentosOrdenEnvio(modalidadEnvio.getLstDocumentosOrden());
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, modalidadEnvio.getLstDocumentosOrden());
		
		return mapping.findForward("modificarEnvio");
	}
	
	public ActionForward siguienteDocumento(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		if(formdoc.getFlgNuevo().equals(Constants.NO))
			return mapping.findForward("modificarEnvio");
		else
			return mapping.findForward("nuevoEnvio");
	}
	
	public ActionForward regresarMantOrdenes(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("mantenimientoEnvios");
//		return buscarOrdenesEnvio(mapping,form,request,response);
	}
	
	public ActionForward nuevaOrdenEnvio(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		reset(form,request);
		
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setFlgNuevo(Constants.SI);
		
		long fechFin = (new java.util.Date()).getTime();
		formdoc.setFechaEmision(Util.getDateAsStr(new java.util.Date(fechFin)));
		
		request.getSession().removeAttribute(SessionConstants.LISTA_DOCUMENTOS_BUSQUEDA_ORDEN_ENVIO);
		request.getSession().removeAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO);
		return mapping.findForward("nuevoEnvio");
	}
	
	public ActionForward buscarDocumentosOrden(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setCodTipoDocumento(formdoc.getCodTipoDocumento()==null ? Constants.VALOR_DEFAULT_CERO : formdoc.getCodTipoDocumento());
		filtroBusquedaVO.setNumDocumento(formdoc.getNumDocumento()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getNumDocumento().trim());
		filtroBusquedaVO.setAsunto(formdoc.getAsunto()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getAsunto().trim());
		filtroBusquedaVO.setFechaInicio(formdoc.getFechaDocInicio()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaDocInicio());
		filtroBusquedaVO.setFechaFin(formdoc.getFechaDocFin()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getFechaDocFin());
		filtroBusquedaVO.setCodOficina(formdoc.getCodUnidadOrganica());
    	
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		ArrayList lstDocumentosOrdenEnvio = sqlModalidadEnvioDAO.buscarDocumentosOrdenEnvio(filtroBusquedaVO);
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_BUSQUEDA_ORDEN_ENVIO, lstDocumentosOrdenEnvio);
		
		return mapping.findForward("busquedaDocumentosOrden");
	}

	public ActionForward adicionarDocumentosOrden(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
//		verificarCargo(mapping,form,request,response);
		
		resetBusqueda(form,request);
		
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setFlgSeleccion(Constants.VALOR_DEFAULT_CERO);
		formdoc.setCodUnidadOrganica(formdoc.getUnidadOrganica());
		
		long fechFin = (new java.util.Date()).getTime();
		long fechIni = fechFin - Constants.FACTOR_FECHA * (Integer.parseInt(Constants.DIAS_MOSTRAR_ULTIMA_SEMANA));
		formdoc.setFechaDocInicio(Util.getDateAsStr(new java.util.Date(fechIni)));
		formdoc.setFechaDocFin(Util.getDateAsStr(new java.util.Date(fechFin)));
		
		request.getSession().removeAttribute(SessionConstants.LISTA_DOCUMENTOS_BUSQUEDA_ORDEN_ENVIO);
		return mapping.findForward("busquedaDocumentosOrden");
	}
	
	public ActionForward siguienteDocumentoBusqueda(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("busquedaDocumentosOrden");
	}
	
	public ActionForward refrescarDocumentos(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		actualizarOrdenEnvio(mapping, form, request, response);
		
		if(formdoc.getFlgNuevo().equals(Constants.NO))
			return mapping.findForward("modificarEnvio");
		else
			return mapping.findForward("nuevoEnvio");
	}

//	public ActionForward refrescarDocumentosNuevo(ActionMapping mapping, ActionForm form,
//			HttpServletRequest request, HttpServletResponse response) throws Exception {
//		return mapping.findForward("nuevoEnvio");
//	}
	
	public ActionForward agregarDocumentosOrden(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
//		verificarCargo(mapping,form,request,response);
		
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		String []sel = formdoc.getCheckValuesDocumentosBusqueda();
		
		ArrayList lstDocumentosBusqueda = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_DOCUMENTOS_BUSQUEDA_ORDEN_ENVIO);
		ArrayList lstDocumentosAdicionar = new ArrayList();
		for(int i=0,n=sel.length; i<n;i++){
			lstDocumentosAdicionar.add(lstDocumentosBusqueda.get(Integer.parseInt(sel[i])));
		}
		
		formdoc.setFlgSeleccion(Constants.VALOR_DEFAULT_UNO);
		ArrayList lstModalidadEnvio = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO);
		if(lstModalidadEnvio == null) lstModalidadEnvio = new ArrayList();
		int ind = lstModalidadEnvio.size();
		
		for(Iterator it = lstDocumentosAdicionar.iterator();it.hasNext();){
			DocumentoOrdenEnvio documentoOrdenEnvio = (DocumentoOrdenEnvio)it.next();
			if(!existeDocumento(documentoOrdenEnvio,lstModalidadEnvio)){
				documentoOrdenEnvio.setIndiceDocumento(String.valueOf(ind++));
				lstModalidadEnvio.add(documentoOrdenEnvio);
			}
		}
		
		formdoc.setLstDocumentosOrdenEnvio(lstModalidadEnvio);
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, lstModalidadEnvio);
		
		formdoc.setCheckValuesDocumentosBusqueda(new String[0]);
		
		return mapping.findForward("busquedaDocumentosOrden");
	}

	public boolean existeDocumento(DocumentoOrdenEnvio documentoOrdenEnvio,ArrayList lstModalidadEnvio){
		for(Iterator it = lstModalidadEnvio.iterator();it.hasNext();){
			DocumentoOrdenEnvio documentoOrdenEnvioNew = (DocumentoOrdenEnvio)it.next();
			if(documentoOrdenEnvio.getCodSeguimiento().equals(documentoOrdenEnvioNew.getCodSeguimiento()))
				return true;
		}
		return false;
	}
	
	public void verificarCargo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		String checkValuesDocumentosCargo = formdoc.getCheckValuesDocumentosCargo();
		String[] checkValuesFechaRecepcion = formdoc.getCheckValuesFechaRecepcion().split("#");
		String[] checkValuesHoraRecepcion = formdoc.getCheckValuesHoraRecepcion().split("#");
		String[] checkValuesObservaciones = formdoc.getCheckValuesObservaciones().split("#");
		
		ArrayList lstDocumentosOrdenEnvio = formdoc.getLstDocumentosOrdenEnvio();
		ArrayList lstDocumentosOrdenEnvioNew = new ArrayList();
		
		int ind=0;
		for(int i=0;i<lstDocumentosOrdenEnvio.size();i++){
			DocumentoOrdenEnvio documentoOrdenEnvio = (DocumentoOrdenEnvio)lstDocumentosOrdenEnvio.get(i);
			
			if(checkValuesDocumentosCargo.indexOf("|"+(i)+"|")==-1){
				documentoOrdenEnvio.setFlgCargo(Constants.NO);
				documentoOrdenEnvio.setFechaRecepcion(Constants.VALOR_DEFAULT_VACIO);
				documentoOrdenEnvio.setHoraRecepcion(Constants.VALOR_DEFAULT_VACIO);
				documentoOrdenEnvio.setObsAdiCargo(i < checkValuesObservaciones.length ? checkValuesObservaciones[i].trim() : Constants.VALOR_DEFAULT_VACIO);
			}
			else{
				documentoOrdenEnvio.setFlgCargo(Constants.SI);
				documentoOrdenEnvio.setFechaRecepcion(ind < checkValuesFechaRecepcion.length ? checkValuesFechaRecepcion[ind].trim() : Constants.VALOR_DEFAULT_VACIO);
				documentoOrdenEnvio.setHoraRecepcion(ind < checkValuesHoraRecepcion.length ? checkValuesHoraRecepcion[ind].trim() : Constants.VALOR_DEFAULT_VACIO);
				documentoOrdenEnvio.setObsAdiCargo(i < checkValuesObservaciones.length ? checkValuesObservaciones[i].trim() : Constants.VALOR_DEFAULT_VACIO);
				ind++;
			}
			lstDocumentosOrdenEnvioNew.add(documentoOrdenEnvio);
		}
		formdoc.setLstDocumentosOrdenEnvio(lstDocumentosOrdenEnvioNew);
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, lstDocumentosOrdenEnvioNew);
	}
	
	public ActionForward eliminarDocumentosOrden(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		verificarCargo(mapping,form,request,response);
		
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		String []sel = formdoc.getCheckValuesDocumentosOrdenes();
		
		ArrayList lstDocumentosOrdenEnvio = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO);
		ArrayList lstDocumentosOrdenEnvioNew = new ArrayList();
			
		ArrayList lstDocumentosOrdenEnvioEliminar = formdoc.getLstDocumentosOrdenEnvioEliminar();
		if(lstDocumentosOrdenEnvioEliminar == null) lstDocumentosOrdenEnvioEliminar = new ArrayList();
		
		for(int i=0,n=sel.length; i<n;i++){
			lstDocumentosOrdenEnvioEliminar.add(lstDocumentosOrdenEnvio.get(Integer.parseInt(sel[i])));
		}
		formdoc.setLstDocumentosOrdenEnvioEliminar(lstDocumentosOrdenEnvioEliminar);
		
//		eliminar
		ModalidadEnvio modalidadEnvio =  new ModalidadEnvio();
		modalidadEnvio.setCodigoOrden(formdoc.getCodigoOrden());
		modalidadEnvio.setLstDocumentosOrdenEliminar(formdoc.getLstDocumentosOrdenEnvioEliminar());
		modalidadEnvio.setLstDocumentosOrden(new ArrayList());
		
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setModalidadEnvio(modalidadEnvio);
		filtroBusquedaVO.setCodOrden(formdoc.getCodigoOrden());
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		int res = sqlModalidadEnvioDAO.actualizarDocumentosOrdenEnvio(filtroBusquedaVO);
//		fin eliminar
		
		int ind = 0;
		for(Iterator it=lstDocumentosOrdenEnvio.iterator();it.hasNext();){
			DocumentoOrdenEnvio documentoOrdenEnvio = (DocumentoOrdenEnvio)it.next();
			if(!existeDocumento(documentoOrdenEnvio,lstDocumentosOrdenEnvioEliminar)){
				documentoOrdenEnvio.setIndiceDocumento(String.valueOf(ind++));
				lstDocumentosOrdenEnvioNew.add(documentoOrdenEnvio);
			}
		}
		formdoc.setLstDocumentosOrdenEnvio(lstDocumentosOrdenEnvioNew);
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, lstDocumentosOrdenEnvioNew);
		
		formdoc.setCheckValuesDocumentosOrdenes(new String[0]);
		
		if(formdoc.getFlgNuevo().equals(Constants.NO))
			return mapping.findForward("modificarEnvio");
		else
			return mapping.findForward("nuevoEnvio");
	}
	
	public ActionForward filtrarDocumentosOrden(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		ModalidadEnvio modalidadEnvio = new ModalidadEnvio();
		String codigoOrden = formdoc.getCodigoOrden();
		String codOficinaFiltro = formdoc.getUnidadOrganica();
		
		modalidadEnvio.setCodigoOrden(codigoOrden);
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		modalidadEnvio = sqlModalidadEnvioDAO.listarDocumentosOrdenEnvio(modalidadEnvio,codOficinaFiltro);
		
		formdoc.setLstDocumentosOrdenEnvio(modalidadEnvio.getLstDocumentosOrden());
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, modalidadEnvio.getLstDocumentosOrden());
		
		if(formdoc.getFlgNuevo().equals(Constants.NO))
			return mapping.findForward("modificarEnvio");
		else
			return mapping.findForward("nuevoEnvio");
	}
	
	/**************************************************************************************/
	
	public ActionForward consultaGuias(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		resetAll(form,request);
		request.getSession().removeAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		VariablesFacade variablesFacade = new VariablesFacade();
		
		ArrayList lstModalidadEnvio = variablesFacade.getTipoModalidadEnvio();
		request.getSession().setAttribute(SessionConstants.LISTA_TIPO_MODALIDAD_ENVIO, lstModalidadEnvio);
		ArrayList lstCourier = variablesFacade.getCourier();
		request.getSession().setAttribute(SessionConstants.LISTA_COURIER, lstCourier);
		ArrayList lstEstadosRegistro = variablesFacade.getEstadoRegistro();
		request.getSession().setAttribute(SessionConstants.LISTA_ESTADO_REGISTRO, lstEstadosRegistro);
		
		ArrayList lstUnidadOrigen = variablesFacade.getOficina();
		request.getSession().setAttribute(SessionConstants.LISTA_UNIDAD_ORIGEN, lstUnidadOrigen);
		
		return mapping.findForward("consultaGuias");
	}
	
	public ActionForward buscarGuiaSalida(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
		filtroBusquedaVO.setNroOrden(formdoc.getNroOrden()==null ? Constants.VALOR_DEFAULT_VACIO : formdoc.getNroOrden().trim());
		filtroBusquedaVO.setCodModalidadEnvio(Constants.VALOR_DEFAULT_CERO);
		filtroBusquedaVO.setFechaInicio(Constants.VALOR_DEFAULT_VACIO);
		filtroBusquedaVO.setFechaFin(Constants.VALOR_DEFAULT_VACIO);
		filtroBusquedaVO.setCodCourier(Constants.VALOR_DEFAULT_CERO);
		
		formdoc.setCheckValuesOrdenes(new String[0]);
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		
		ArrayList lstModalidadEnvio = sqlModalidadEnvioDAO.listarOrdenesEnvio(filtroBusquedaVO);
		request.getSession().setAttribute(SessionConstants.LISTA_ORDENES_ENVIO, lstModalidadEnvio);			
		return mapping.findForward("consultaGuias");
	}
	
	public ActionForward detalleGuia(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		reset(form,request);
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		Usuario usuarioLogin = (Usuario)request.getSession().getAttribute(SessionConstants.SGD_USUARIO_SESION_ACTIVO);
		ArrayList lstOrdenesEnvio = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_ORDENES_ENVIO);
		
		String sel = request.getParameter("index");
		ModalidadEnvio modalidadEnvio = (ModalidadEnvio)lstOrdenesEnvio.get(Integer.parseInt(sel));
		
		formdoc.setCodigoOrden(modalidadEnvio.getCodigoOrden());
		formdoc.setNumeroOrden(modalidadEnvio.getNroOrden());
		formdoc.setCodigoModalidadEnvio(modalidadEnvio.getCodModalidadEnvio());
		formdoc.setFechaEmision(modalidadEnvio.getFechaEmision());
		formdoc.setCodigoCourier(modalidadEnvio.getCodCourier());
		formdoc.setCodigoEstado(modalidadEnvio.getCodEstado());
		formdoc.setLocalidad(modalidadEnvio.getLocalidad());
		formdoc.setFechaEntregaCourier(modalidadEnvio.getFechaEntregaCourier());
		
		if(usuarioLogin.isPrivilegioJefeUnidadOrganica() || usuarioLogin.isPrivilegioPersonal())
			formdoc.setUnidadOrganica(usuarioLogin.getEncargaturaPerfil().getCodArea());
		else
			formdoc.setUnidadOrganica(Constants.VALOR_DEFAULT_CERO);
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		modalidadEnvio = sqlModalidadEnvioDAO.listarDocumentosOrdenEnvio(modalidadEnvio,formdoc.getUnidadOrganica());
		
		formdoc.setLstDocumentosOrdenEnvio(modalidadEnvio.getLstDocumentosOrden());
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, modalidadEnvio.getLstDocumentosOrden());
		
		return mapping.findForward("detalleGuia");
	}
	
	public ActionForward filtrarDocumentosGuia(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		ModalidadEnvio modalidadEnvio = new ModalidadEnvio();
		String codigoOrden = formdoc.getCodigoOrden();
		String codOficinaFiltro = formdoc.getUnidadOrganica();
		
		modalidadEnvio.setCodigoOrden(codigoOrden);
		
		SQLModalidadEnvioDAO sqlModalidadEnvioDAO = new SQLModalidadEnvioDAO();
		modalidadEnvio = sqlModalidadEnvioDAO.listarDocumentosOrdenEnvio(modalidadEnvio,codOficinaFiltro);
		
		formdoc.setLstDocumentosOrdenEnvio(modalidadEnvio.getLstDocumentosOrden());
		request.getSession().setAttribute(SessionConstants.LISTA_DOCUMENTOS_ORDEN_ENVIO, modalidadEnvio.getLstDocumentosOrden());
		
		return mapping.findForward("detalleGuia");
	}
	
	public ActionForward regresarConsultaGuias(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		return mapping.findForward("consultaGuias");
	}
	
	public ActionForward exportarGuiaSalida(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setNombreUnidad(request.getParameter("nombreUnidad"));
		return mapping.findForward("xlsGuiaSalida");
	}
	
	public ActionForward excelGuiaSalida(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModalidadEnvioForm formdoc = (ModalidadEnvioForm)form;
		formdoc.setNombreUnidad(request.getParameter("nombreUnidad"));
		return mapping.findForward("excelGuiaSalida");
	}
}
